package service

import (
	"ginweb-admin/global"
	"ginweb-admin/model/context"
)

/** Unscoped() 可以查询到被软删除的信息 */

// 父类
type BaseService[D any, T any] struct{}

// 创建和保存
func (service *BaseService[D, T]) Create(data *T) (dbData *T, err error) {
	err = global.DB.Create(&data).Error
	return data, err
}

// 根据ID查询明细，不查询软删除的记录
func (service *BaseService[D, T]) GetById(id D) (data *T, err error) {
	err = global.DB.Where("id = ?", id).Find(&data).Error
	return data, err
}

// 根据ID查询明细，查询软删除的记录
func (service *BaseService[D, T]) UnGetById(id D) (data *T, err error) {
	err = global.DB.Unscoped().Where("id = ?", id).Find(&data).Error
	return
}

// 修改map的方式
func (service *BaseService[D, T]) UpdateData(data *T, mapField *map[string]any) (err error) {
	err = global.DB.Unscoped().Model(data).Updates(mapField).Error
	return err
}

// 更新状态
func (service *BaseService[D, T]) UpdateStatus(status context.StatusContext) (err error) {
	var data T
	err = global.DB.Model(data).Unscoped().Where("id = ?", status.Id).Update(status.Field, status.Value).Error
	return
}

// 根据ID删除（软删除）
func (service *BaseService[D, T]) DeleteById(id D) (err error) {
	var data T
	err = global.DB.Where("id = ?", id).Delete(&data).Error
	return
}

// 根据ID删除（真删除）
func (service *BaseService[D, T]) UnDeleteById(id D) (err error) {
	var data T
	err = global.DB.Unscoped().Where("id = ?", id).Delete(&data).Error
	return
}

// 批量删除（软删除）
func (service *BaseService[D, T]) DeleteByIds(data []*T) (err error) {
	err = global.DB.Delete(&data).Error
	return err
}

// 批量删除（真删除）
func (service *BaseService[D, T]) UnDeleteByIds(data []*T) (err error) {
	err = global.DB.Unscoped().Delete(&data).Error
	return err
}
